home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 2: CDPD 1 / Almathera Ten on Ten - Disc 2: CDPD 1.iso / pd / 051-075 / 074 / dme / doc.txt < prev    next >
Text File  |  1995-03-13  |  21KB  |  556 lines

  1. DOC.TXT
  2.  
  3. DME V1.25 (c)CopyRight 1987, Matthew Dillon.  All Rights Reserved. This
  4. software may be distributed for non profit only.  This software is
  5. shareware, but I won't get on anybody's case or whine if I don't make any
  6. money from it.
  7.  
  8.     Matthew Dillon        contribute if you wish.
  9.     891 Regal Rd
  10.     Berkeley, Ca. 94708
  11.  
  12.     USENET   ihnp4!ucbvax!dillon
  13.     ARPANET  dillon@ucbvax.berkeley.edu
  14.  
  15. ---------------------------------------------------------------------------
  16.  
  17. I   Overview
  18. II  Keymapping        keymapping
  19. III Command Sequences    DME commands
  20. IV  File Particulars    notes on loading and saving files
  21. V   Revision Summary    revision numbering
  22. VI  Compiling        compiling instructions
  23.  
  24.                     I
  25.                  OVERVIEW
  26.  
  27. See REVISIONS section for revisions.  DME is a WYSIWYG editor designed
  28. mainly for programmers.  Although it is not a word processor, it does
  29. include some word processing features such as Word-Wrap and automatic
  30. paragraph formatting.  Here is a quick 'features' list:
  31.  
  32.     -control language based on a rich command set accessed manually
  33.      or via arbitrary mapping of keys.  (Every key may be mapped to 16
  34.      different things)
  35.  
  36.     -fast visual response (it scrolls quickly)
  37.  
  38.     -title-line statistics showing your current position in the file,
  39.      file name, whether the file has been modified or not, etc...
  40.  
  41.     -Multiple Windows, ability to iconify windows
  42.  
  43.     -Word Wrap and automatic paragraph formatting.
  44.  
  45. DME has been designed to allow easy expansion, and I intend to make many
  46. future improvments.  It has not been designed for user friendliness, but is
  47. straight forward if you read this document fully.
  48.  
  49. DME can take any number of arguments.  Any argument without a '-' in front
  50. of it is considered to be a file.   Normally, DME will automatically SOURCE
  51. two script file, S:.EDRC, and the .EDRC in your current directory. These
  52. files do not have to exist. These script files usually contain mappings and
  53. do things like turn on word wrap and set the right margin.
  54.  
  55.     FLAGS:
  56.         -ffilename        -source this script file instead of .EDRC
  57.         -b            -normally when multiple files are specified,
  58.                  DME opens them with small windows.  This opens
  59.                  them with normal sized windows.
  60.  
  61.         -tN     -Open the window on scan line N
  62.         -lN     -Open the window offset N scan columns
  63.         -wN     -Make the window N pixels wide
  64.         -hN     -Make the window N pixels high
  65.  
  66.  
  67.  
  68.                     II
  69.                  KEYMAPPING
  70.  
  71. MOUSE SELECT (LEFT ) BUTTON:
  72.     There is no designation to map the left button.
  73.  
  74.     positions cursor at the indicated spot.  The cursor now tracks the
  75.     mouse.
  76.  
  77.  
  78. MOUSE MENU (RIGHT) BUTTON:
  79.     There is no designation to map the right button.
  80.  
  81.     This button iconifies the current active window if not iconified, and
  82.     de-iconifies the window if iconified (Try IT!).  The iconification
  83.     features:
  84.     -Remembers original window size and placement
  85.     -Remembers placement of iconified window when you re-iconify later.
  86.  
  87.     Currently, you will crash the machine if you run out of memory and DME
  88.     is unable to open the icon window or original window, so be careful.
  89.  
  90.  
  91. KEYBOARD:
  92.  
  93. The rest of the Functional interface for DME is based on keymappings and a
  94. rich command set.  Unlike other text editors, any non-qualifier key in DME
  95. may have any meaning whatsoever.  It just so happens that the default
  96. keymappings assign such things as the `return' key to the RETURN function,
  97. the `up' key to the UP function, etc...  Keys are named by their keycap
  98. labels with the following exceptions:
  99.  
  100.     the name for Back-Space is    BS
  101.     the name for numeric keypad keys are prepended with an NK, except for
  102.     the Enter key which is named 'ENTER'.
  103.     The four cursor control keys are labeled UP, DOWN, LEFT, and RIGHT
  104.  
  105. *NOTE*    You must type commands in lower-case, except for text, which can be
  106. either lower or upper case, and for upper-case alpha keys when specifying
  107. keymaps (i.e.  A and s-a are the same key).  The exception is the AMIGA
  108. qualifier key, which uses 'A' instead of 'a'(Alt).
  109.  
  110. Each key may be qualified with any combination of CTRL, ALT, SHIFT, or
  111. AMIGA Keys.  With four qualifier keys, you can assign up to 16 different
  112. meanings per physical (except qualifier keys) key on the keyboard.
  113.  
  114. NOTE: The CAPS-LOCK, when lit, is equivalent to SHIFT only for Alpha keys.
  115.  
  116. NOTE: The AMIGA-ALT (aA) combination isn't very usable since Intuition uses
  117. the sequence to duplicate a Mouse SELECT.  Other AMIGA sequences are used
  118. by intuition for mouse movement and other things.
  119.  
  120.     ***EXAMPLES:***
  121.  
  122.     tab tab
  123.     a-a ALT a
  124.     A-a AMIGA a
  125.     sA-a    SHIFT AMIGA a
  126.     s-tab    SHIFT tab
  127.     c-tab    CTRL tab
  128.     ac-?    ALT-CTRL ?
  129.     s-f5    SHIFT F5
  130.     nk0 Numeric Keypad 0
  131.     cs-nk0    CTRL SHIFT Numeric Keypad 0
  132.  
  133.     ***************
  134.  
  135. The Default Mappings are as follows:
  136.  
  137.     All Printable Ascii keys mapped to their ascii equivalent
  138.     BS, DEL, UP, DOWN, LEFT, RIGHT, TAB, S-TAB, ENTER mapped properly
  139.  
  140.     `s- '       Shift Space is Mapped to space
  141.     backspace    Back Space
  142.     tab Tab
  143.     s-tab    Back tab
  144.     enter    the RETURN command
  145.     return    `return insline up firstnb down'
  146.     esc Escape into command mode
  147.     del Delete character
  148.     s-del    Delete line
  149.     c-del    Remove to end of line
  150.     up        cursor up
  151.     down    cursor down
  152.     left    cursor left
  153.     right    cursor right
  154.     s-up    top of text
  155.     s-down    bottom of text
  156.     s-left    first column
  157.     s-right    last column (one past the last non-blank on a line)
  158.     c-up    page up
  159.     c-down    page down
  160.     c-q Quit
  161.     c-w TOGGLE WORD WRAP MODE
  162.     f1        Prompts for file to insert
  163.     f2        Prompts for new file to replace current text with
  164.     f3        Prompts for new file to place into new window
  165.     f7        Prompts for filename to save marked block to
  166.     f8        Saves current text and then does an 'f2'
  167.     f9        Saves current text, but does not quit
  168.     f10 Saves current text and quits.
  169.     c-r Word Right
  170.     c-l Word Left
  171.     c-i insert mode on
  172.     c-o insert mode off
  173.     c-/ Prompts for search pattern
  174.     c-p search previous occurance
  175.     c-n search next occurance
  176.     c-s `split first down' ... fancy split line
  177.     c-u Unblock a block
  178.     c-b Mark start/end of a block
  179.     a-s SOURCE a block of text as if it were a script file
  180.     sa-s    SOURCE the current line of text as if it were a script file
  181.     a-d delete block
  182.     a-c copy block
  183.     a-m move block
  184.     c-f reformat paragraph
  185.     c-g Prompts for line to GOTO to.
  186.     c-j join next line to this line.
  187.  
  188.  
  189.                     III
  190.                  COMMAND SEQUENCES
  191.  
  192. DME has a rich command set which allows you to embed commands within
  193. commands, or specify multiple commands in a row.  A command consists of a
  194. KEYWORD followed by a FIXED number of arguments (0, 1, 2...).  The argument
  195. delimeter in DME is a SPACE.  Therefore, to embed strings containing spaces
  196. as a single argument, you must surround the string with `string'
  197. (backquote-string-quote).  TEXT to be written as if typed is also specified
  198. via a string in backquote-quotes.  For example:
  199.  
  200.     right right `hello' right right `hello' enter down
  201.     map f4 `right right' map f5 `left left'
  202.     map f4 ``hello''
  203.  
  204. Reiterating (because this is important!)... If a command expects ONE
  205. argument, then it really does expect a single argument, and any remaining
  206. arguments are thought to be the next command... so:
  207.  
  208.     map f4 right
  209.                     -right is only one word, so no need
  210.                      for `'.
  211.     map f4 `right right'
  212.                     -we want to map f4 to two rights... we
  213.                      need the `' or the second right will
  214.                      not be part of the map.
  215.  
  216.     map c-del `repeat cright del'
  217.                     -this is already implimented as REMEOL,
  218.                      but shown here for clarity.
  219.  
  220. Some arguments will eventually be fed through the command interpreter more
  221. than once.  The MAP command is a good example.    When you execute a MAP
  222. command, the first run through the command interpreter installs the map
  223. string minus a set of quotes.  So, if you want to specify text, you must
  224. enclose the text in two sets of ``text'' because the map string gets passed
  225. through the command interpreter again when you hit the mapped key.  Here
  226. are some more complex examples:
  227.  
  228.     map f4 `right right `hello' left left'      *RIGHT*
  229.     map f4 right right hello left left        *WRONG*
  230.  
  231.     map f4 `map f4 ``hello'''
  232.                     -the first time you hit F4, it's command
  233.                      is to re-map itself to the TEXT `hello'.
  234.                      (gads!).
  235.  
  236.     map c-i `repeat tr `` '''
  237.                     -example of how to embed a space in a
  238.                      map and repeat (goes through command
  239.                      interpreter three times!).
  240.  
  241.  
  242. An easy way to fool around executing commands or making maps is either to
  243. use the ESC key (which enters command mode), or  a-S (alt-shift-s), which
  244. EXECUTES the current DME line that the cursor is on.... so you can use DME
  245. to edit and test your new keymappings.
  246.  
  247.  
  248. !!!!!!!!!! NOTE NOTE NOTE NOTE NOTE !!!!!!!!!!!!!! You must type commands
  249. in LOWER case. They are in upper case here for visibility.
  250.  
  251.     COMMAND LIST
  252.  
  253.  
  254.  
  255.     `text'          -enter text as if typed.
  256.     key     -execute a keymap as a macro (example:  c-a)
  257.     IF cnd act        -IF/WHILE/IFELSE.. SEE BELOW
  258.     WHILE cnd act
  259.     IFELSE cnd ifact elseact
  260.  
  261.     ESC     -toggle manual command entry mode
  262.     ESCIMM arg        -go into command entry mode prompting with a predefined
  263.              string.
  264.     LAST        -move one beyond the last non-space in a line.
  265.     FIRST        -move to column 1
  266.     DOWNADD        -cursor down.  If at bottom of text, add a line.
  267.     MAP key map     -map a key to a keymap
  268.     UNMAP key        -unmap a key
  269.     UP            -cursor up
  270.     DOWN        -cursor down
  271.     LEFT        -cursor left
  272.     RIGHT        -cursor right
  273.     PAGEUP        -pageup a partial page (see PAGESET)
  274.     PAGEDOWN        -pagedown a partial page (see PAGESET)
  275.     PAGESET n        -n PERCENT (0 to 100). page step size relative to the
  276.              current number of rows in the window.
  277.     RETURN        -same as `FIRST DOWNADD'
  278.     WLEFT        -move to beginning of previous word.  If in the middle
  279.              of a word, move to beginning of current word.
  280.  
  281.     WRIGHT        -move to beginning of next word
  282.     BS            -backspace, moving text to the right of the cursor
  283.              leftward.
  284.     BACK        -same as BS
  285.     DEL     -delete char under cursor (cursor does not move),
  286.              moving text to the right leftward.
  287.     INSLINE        -insert line
  288.     DELINE        -delete line
  289.     TAB     -forward tab
  290.     BACKTAB        -backward tab
  291.     TABSTOP N        -Set tab stops every N
  292.     NEWFILE name    -replace current text with new file
  293.     INSFILE name    -insert a file into the current text.
  294.     TLATE [+/-]N    -translate character by +N or -N, or set character to
  295.              exactly N if no + or -. (e.g. TLATE +65 TLATE 3)
  296.     SAVEOLD        -save current text under current name
  297.     SAVEAS file     -save current text under a different name
  298.     TOP     -Move to Top of File
  299.     BOTTOM        -Move to Bottom of File
  300.     SOURCE file     -source a script file
  301.     BSOURCE        -source current text block as if it were a script file
  302.     FIRSTNB        -Move to first non-blank in line.
  303.     REMEOL        -Remove text under and beyond the cursor.
  304.     QUIT        -quit
  305.     FINDSTR string  -SET the search string pattern
  306.     REPSTR string   -SET the replace string pattern
  307.     FIND string     -SET the search pattern and do a NEXT
  308.     NEXT        -find next occurance of search pattern
  309.     PREV        -find previous occurance of search pattern
  310.     FINDR s1 s2     -Set find and replace patterns and do one find/rep.
  311.     NEXTR        -find next occurance and replace
  312.     PREVR        -find previous occurance and replace
  313.     SPLIT        -Split line at cursor
  314.     JOIN        -join next line to line at cursor
  315.     REPEAT cnt comm -SEE BELOW
  316.     INSERTMODE what -set INSERTMODE.  what = on, off, or toggle
  317.     SCREENTOP        -Move cursor to the top of the screen
  318.     SCREENBOTTOM    -Move cursor to the bottom of the screen.
  319.     GOTO BLOCK        -Goto the beginning of the marked block
  320.     GOTO [+/-]N     -Goto an absolute or relative line number
  321.     BLOCK        -Set start or end of block
  322.     UNBLOCK        -clear the block markers.
  323.     BCOPY        -copy block before cursor line
  324.     BMOVE        -move block before cursor line
  325.     BDELETE        -delete the block
  326.     BSAVE file        -save the block to a file
  327.     SAVEMAP file    -save user keymappings
  328.     SAVESMAP file   -save all keymappings, including system keymaps
  329.     TOGGLE N        -flip toggle array entry N    (See IF)
  330.     SETTOGGLE N     -set toggle array entry N
  331.     RESETTOGGLE N   -clear toggle array entry N
  332.     NEWWINDOW        -open newwindow
  333.     SAVETABS on/off -Optimize file saves by crunching spaces to tabs.  The
  334.              default is OFF.
  335.     LEFTEDGE N        -set leftedge in pixels for any new window
  336.     TOPEDGE N        -set topedge in pixels for any new window
  337.     WIDTH N        -set width in pixels for any new window
  338.     HEIGHT N        -set height in pixels for any new window
  339.     RESIZE cols rows-Resize current window. E.G:  `resize 70 23'
  340.     MARGIN N        -set WordWrap and paragraph formatting margin
  341.     WORDWRAP on/off/toggle  -Word Wrap mode
  342.     REFORMAT        -reformat paragraph using the margin.
  343.  
  344.  
  345.     -------------------------------------------------------------------
  346.     Command which cause a command line to abort (e.g. in repeat, while):
  347.  
  348.     FIND[R]/NEXT[R]/PREV[R]  when the string is not found.  NEXT stops at
  349.     the end of the file, PREV stops at the beginning.
  350.  
  351.     DOWN,LEFT,RIGHT,UP    when the operation cannot be done.
  352.     -------------------------------------------------------------------
  353.  
  354.  
  355.     REPEAT N arg    -Repeat `arg' N times.  Apart from being a number, N
  356.              can also be one of:
  357.  
  358.             line    Current line # (lines begin at 1)
  359.             lbot    #lines to the bottom, including current line
  360.             cleft    column # (cols begin at 0)
  361.             cright    #chars to eol, including current char under cursor
  362.             tr    #char positions to next tab
  363.             tl    #char positions to next back tab
  364.  
  365.             Certain commands can abort a REPEAT loop.  Specifically,
  366.             any FIND[R], NEXT[R], or PREV[R] in which the search
  367.             string is NOT found will abort a REPEAT.
  368.  
  369.             Specifying -1 as N causes REPEAT to go on forever
  370.             (well, actually, 0xFFFFFFFF times) or until an abort.
  371.  
  372.     IF [!]condition arg
  373.     WHILE [!]condition arg
  374.     IFELSE [!]condition arg elsearg
  375.  
  376.         If the specified condition is true, execute the argument.  For
  377.         WHILE, the argument is executed until the condition is false
  378.         (be careful!).
  379.  
  380.         the optional '!' inverts the logic.
  381.  
  382.         Conditions:
  383.  
  384.         #        if toggle entry # is SET
  385.         t        if On line 1
  386.         b        if On last line
  387.         l        if At column 0
  388.         r        if At end of line (spaces below and beyond)
  389.         m        if Text has been modified
  390.         i        if in insert mode
  391.         x[<=>]# if column position (starts at 1) is (any OR combo of
  392.             <, =, or >) than some number.  Example:   x<20
  393.         y[<=>]# if Line number (starts at 1) is (same as for x)
  394.         cl        character under cursor is lower case alpha
  395.         cu        character under cursor is upper case alpha
  396.         ca        character under cursor is alpha-numeric
  397.         cn        character under cursor is numeric
  398.         c[<=>]# character under cursor is ascii code # (# in decimal)
  399.             optional conditionals as in 'x' and 'y'.
  400.         cb        cursor within a block
  401.  
  402.     Example: simulating an insert mode toggle: ALT-i (not CTL-i)
  403.  
  404.      map a-i `ifelse 0 `toggle 0 insertmode OFF' `toggle 0 insertmode ON''
  405.  
  406.     Example: while lower case, map to upper case and move right.
  407.  
  408.      map c-U `while cl `tlate -32 right''
  409.  
  410.      if c<32 ``char under cursor is smaller than 32''
  411.      if c<>32 ``char under cursor is not equal to 32''
  412.      while !b down
  413.  
  414.  
  415.     WARNING:    It is possible to get into infinite loops with REPEAT and
  416.         WHILE.    Currently, BREAK is *not* handled by the open
  417.         window, but by whatever executed DME.  That is, you must
  418.         either Ctl-C from your CLI, or send a BREAK to the DME
  419.         process.  I hope to fix this soon.
  420.  
  421.  
  422.                     IV
  423.                  FILE PARTICULARS
  424.  
  425. No Matter what you set internal tabs to, tabs in disk files will be 8. DME
  426. by default doesn't bother to optimize when writing out files and simply
  427. uses spaces.  If you `SAVETABS on' before saving (or in your S:.EDRC,
  428. etc...), DME will attempt to optimize the file by placing TABS in
  429. appropriate places.  DME will not place any TABS after the first single,
  430. back, or double quote is encountered in a line.  If this does not cover
  431. every situation in your particular application that you want to be *sure*
  432. no tabs will occur in sensitive sections, then you should not use `SAVETABS
  433. on'.
  434.  
  435. The command to save the current document under the default name is SAVEOLD,
  436. *not* SAVE.  SAVE is not a valid command.  This is to prevent people who
  437. have not read the documentation from assuming 'save' takes an argument (and
  438. screwing up their work).  SAVEOLD does NOT take an argument, SAVEAS does.
  439.  
  440.  
  441.                     V
  442.                   REVISION SUMMARY
  443.  
  444. Problems Still not resolved:
  445.  
  446.     -cannot block move/copy accross windows (must BSAVE to, say, the pipe:
  447.      device)
  448.     -still problems if you resize the window while DME is doing
  449.      continuous screen operations (think it's the graphics library).
  450.     -cannot type CTRL-C to break out of infinite loop... must use
  451.      workbench C:BREAK command.
  452.     -Blocks are not highlighted.
  453.     -no 'dumb user' prompts.
  454.     -no 'change working directory'... though this really isn't a bug.
  455.      putting it in means that I would have to backtrace every filename
  456.      so DME wouldn't get confused.  As it is, I think typing in paths
  457.      isn't much of a big deal for people, so.... poof.
  458.  
  459.  
  460. V1.25 RELEASE
  461.  
  462.     -BSAVE does NOT UNBLOCK after saving (switch in functionality yet again)
  463.     -various bugs fixed (IF, tabs on file save)
  464.     -New Commands: MARGIN, REFORMAT, WORDWRAP, RESIZE,
  465.            TOPEDGE, LEFTEDGE, WIDTH, HEIGHT
  466.     -Command line options added for setting the window size and an optional
  467.      specified script file (when specified, local .EDRC not sourced).
  468.  
  469.     -Enhanced Commands: IF  ..more control with conditions, addition of
  470.                   a couple more specifications.
  471.                JOIN .. functionality slightly changed
  472.     -keymaps may now be used as macros in other commands. (macros)
  473.     -New keymaps added to the default set.
  474.     -Mouse movement cleaned up a little.
  475.  
  476. V1.24 Internal
  477.  
  478. V1.23 RELEASE
  479.     -S:.EDRC now sourced instead of C:.EDRC
  480.     -User keymappings now work in COMMAND mode (when you hit ESC).
  481.     -You can now map the Amiga keys ('A' for Amiga, since 'a' is alt).
  482.     -Enhanced Commands: IF/IFELSE/WHILE (optional '!' in front of cond)
  483.             new condition 'cb' 'character in selected block'
  484.             GOTO (can now say `goto block')
  485.     -NewCommands:    PAGESET SAVETABS
  486.     -Writing TABS (always 8) out to disk to save space now supported.
  487.  
  488. V1.22 RELEASE (BUF FIXES FROM 1.20)
  489.     -'newfile' fixed
  490. V1.21 RELEASE (BUG FIXES FROM 1.20)
  491.     -iconify and window handling fixed
  492.     -left mouse button now tracks the mouse.
  493. V1.20 RELEASE
  494.     -bug fixes: bsave now unmarks the block, bdelete now sets 'modified' flag.
  495.         (other small fixes).
  496.     -enhancements: overwrite mode status indicator, find, find-replace now
  497.         completely implemented (yahhoo!!!)
  498.     -changed commands:    FIND NEXT PREV: no longer loop back to the top of
  499.         file or top->bottom in the case of PREV.  DELINE will now delete
  500.         text on the line if there is only one line of text.
  501.     -enhanced commands: GOTO REPEAT
  502.     -new commands: SAVEMAP SAVESMAP TOGGLE SETTOGGLE RESETTOGGLE TLATE
  503.            IF IFELSE WHILE BSOURCE
  504.            FINDSTR REPSTR FINDR NEXTR PREVR
  505.            NEWWINDOW
  506.     -new keymappings: (see a-s, a-S, f3)
  507.     -window iconification with mouse menu button.
  508.  
  509.  
  510. V1.12 RELEASE
  511.     -cursor is now pen #3 rather than #1.
  512.     -changeover to AZTEC C, smaller executable.
  513.     -now maps shift space to a space.
  514.     -new commands: REMEOL, WLEFT, WRIGHT
  515.     -display bug fixes (SPLIT)
  516.     -FIND/PREV/NEXT will now abort a REPEAT if string not found.
  517.  
  518. V1.11 RELEASE NOTES
  519.     -Bug fixes (mainly graphical mistakes).
  520.     -User keymappings are disabled in command mode (so you can unmap
  521.       single ascii characters you may have mapped).
  522.     -Illegal key combinations no longer give garbage (e.g. ALT-CURSOR-DOWN)
  523.       you can, of course, still map them to anything you wish.
  524.     -Save now checks for error conditions on write.
  525.     -Uses Default Console Keymap (i.e. no longer assumes USA)... but there
  526.       *is* some stangeness.
  527.  
  528. V1.00 RELEASE NOTES
  529.     -has find, but no replace function
  530.     -marked blocks are not highlighted
  531.     -assumes USA keyboard            (fixed 1.11)
  532.     -disk files written out use spaces instead of tabs&spaces
  533.     -No scroll bar yet.
  534.  
  535.  
  536.                     VI
  537.                 COMPILING
  538.  
  539.  
  540. DME now compiles under AZTEC.  You must compile with the 32 bit int option,
  541. but may use the small code/data model.    You must use V3.00 or above of
  542. MY.LIB    (MY32.LIB), dated MARCH 1987
  543.  
  544.     cc +L -S NAME.c        (for each .C module)
  545.     ln *.o -lmy32 -lc32 +Q
  546.  
  547.  
  548. To compile DME under lattice requires the MY.LIB version 3.00 or above:
  549.  
  550.     lc1 -oram: -iinclude: NAME.C
  551.     lc2 -s -v -oNAME.o ram:NAME.q
  552.  
  553.     blink lattice:Astartup.obj library lib:my.lib+lib:amiga.lib to ram:dme ND
  554.  
  555.  
  556.